// pages/login/login.js
import { login, getCodeImg, getInfo } from "../../api/login.js"
import store from "../../store/index.js"

Page({
  /**
   * 页面的初始数据
   */
  data: {
    codeUrl: "",
    captchaEnabled: true,
    // 用户注册开关
    register: false,
    globalConfig: getApp().globalData.config,
    loginForm: {
      username: "admin",
      password: "admin123",
      code: "",
      uuid: ""
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 初始化插件
    const app = getApp()
    this.$modal = app.$modal || require('../../plugins/modal.js').default
    
    this.getCode()
    
    // 检查是否已经登录
    if (store.getToken()) {
      // 验证token有效性
      getInfo().then(res => {
        if (res.code === 200) {
          // token有效，直接跳转到首页
          wx.reLaunch({
            url: '/pages/index/index'
          })
        } else {
          // token无效，清除本地存储并留在登录页
          store.clear()
        }
      }).catch(error => {
        // 请求失败，可能是网络问题或token失效，清除本地存储
        store.clear()
      })
    }
  },

  // 处理用户名输入
  onUsernameInput(e) {
    this.setData({
      'loginForm.username': e.detail.value
    })
  },

  // 处理密码输入
  onPasswordInput(e) {
    this.setData({
      'loginForm.password': e.detail.value
    })
  },

  // 处理验证码输入
  onCodeInput(e) {
    this.setData({
      'loginForm.code': e.detail.value
    })
  },

  // 用户注册
  handleUserRegister() {
    const app = getApp()
    const $tab = app.$tab || require('../../plugins/tab.js').default
    // 注意：项目中没有register页面，所以注释掉相关代码
    // $tab.redirectTo(`/pages/register/register`)
    this.$modal.msg("暂不支持注册功能")
  },

  // 隐私协议
  handlePrivacy() {
    const app = getApp()
    const $tab = app.$tab || require('../../plugins/tab.js').default
    let site = this.data.globalConfig.appInfo.agreements[0]
    // 注意：协议链接未设置，所以只显示提示信息
    // $tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
    this.$modal.msg("隐私政策内容待完善")
  },

  // 用户协议
  handleUserAgrement() {
    const app = getApp()
    const $tab = app.$tab || require('../../plugins/tab.js').default
    let site = this.data.globalConfig.appInfo.agreements[1]
    // 注意：协议链接未设置，所以只显示提示信息
    // $tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
    this.$modal.msg("用户服务协议内容待完善")
  },

  // 获取图形验证码
  getCode() {
    getCodeImg().then(res => {
      this.setData({
        captchaEnabled: res.captchaEnabled === undefined ? true : res.captchaEnabled,
        codeUrl: res.captchaEnabled !== false ? 'data:image/gif;base64,' + res.img : "",
        'loginForm.uuid': res.uuid
      })
    }).catch(error => {
      this.$modal.msgError("获取验证码失败")
    })
  },

  // 登录方法
  async handleLogin() {
    if (this.data.loginForm.username === "") {
      this.$modal.msgError("请输入账号")
      return
    } else if (this.data.loginForm.password === "") {
      this.$modal.msgError("请输入密码")
      return
    } else if (this.data.loginForm.code === "" && this.data.captchaEnabled) {
      this.$modal.msgError("请输入验证码")
      return
    }
    
    this.$modal.loading("登录中，请耐心等待...")
    
    // 调用登录API
    login(
      this.data.loginForm.username,
      this.data.loginForm.password,
      this.data.loginForm.code,
      this.data.loginForm.uuid
    ).then(response => {
      this.$modal.closeLoading()
      if (response.code === 200) {
        // 登录成功
        store.setToken(response.token)
        
        // 获取用户信息并存储到store
        store.GetInfo().then(infoRes => {
          if (infoRes.code === 200) {
            this.$modal.msgSuccess("登录成功")
            
            // 延迟跳转到首页
            setTimeout(() => {
              wx.reLaunch({
                url: '/pages/index/index'
              })
            }, 1000)
          } else {
            // 获取用户信息失败，清除token并提示错误
            store.clear()
            this.$modal.msgError(infoRes.msg || "获取用户信息失败")
          }
        }).catch(error => {
          console.error("获取用户信息失败:", error)
          // 获取用户信息失败，清除token并提示错误
          store.clear()
          this.$modal.msgError("登录失败，请重新登录")
        })
      } else {
        // 登录失败，根据错误信息给出具体提示
        this.handleLoginError(response)
        // 刷新验证码
        if (this.data.captchaEnabled) {
          this.getCode()
        }
      }
    }).catch(error => {
      this.$modal.closeLoading()
      this.$modal.msgError("登录请求失败，请检查网络连接")
      // 刷新验证码
      if (this.data.captchaEnabled) {
        this.getCode()
      }
    })
  },

  // 处理登录错误
  handleLoginError(response) {
    const msg = response.msg || "登录失败"
    
    // 根据错误信息判断具体的错误类型
    if (msg.includes("验证码")) {
      this.$modal.msgError("验证码错误")
    } else if (msg.includes("账号") || msg.includes("密码") || msg.includes("用户")) {
      this.$modal.msgError("账号或密码错误")
    } else {
      this.$modal.msgError(msg)
    }
  },

  // 密码登录
  async pwdLogin() {
    // 这个方法现在由handleLogin直接调用API处理
  },

  // 登录成功后，处理函数
  loginSuccess(result) {
    // 这个方法现在由handleLogin直接处理
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})